package unq.repository

import java.util.ArrayList
import java.util.HashMap
import java.util.List
import java.util.Map
import unq.model.Biblioteca
import unq.model.Caso
import unq.model.Club
import unq.model.Embajada
import unq.model.Informante
import unq.model.Juego
import unq.model.Pais
import unq.model.Villano

class Repository {
	
	private Map<Integer,Juego> todosLosJuegos = new HashMap
	
	private static var Repository instance 
	
	new(){}
	
	def static Repository instance(){
		if(instance == null){
			instance = new Repository
			instance.todosLosJuegos = new HashMap
		}
		instance
	}
	
	
	def Integer agregarJuego(Juego juego){
		var Integer id = todosLosJuegos.size
		todosLosJuegos.put(id, juego)
		id
	}
	
	def Juego obtenerJuego(Integer id){
		todosLosJuegos.get(id)
	}
	
	def static Villano crearVillanoYAgregar(Juego elJuego,String nombre,List<String> senias, List<String> hobbies){
		var Villano villano= new Villano(nombre, senias,hobbies)
		elJuego.agregarVillano(villano)
		villano
	}
	
	def static crearPais(List<String> caracteristicas, String nombre, Juego juego){
		new Pais(nombre, caracteristicas, juego)
	}
	
	def static Juego crearUnJuego(){
		var Juego elJuego = new Juego
		
		var Villano carmenSanDiego = crearVillanoYAgregar(elJuego,'Carmen San Diego', new ArrayList(#["Pelo Negro", "Flaca"]), new ArrayList(#["Viajar", "Cantar"]))
		crearVillanoYAgregar(elJuego,'Maxime Donnay', new ArrayList(#["Pelo Rojo", "Bajo"]), new ArrayList(#["Rock", "Futbol"])) 
		crearVillanoYAgregar(elJuego,'Paul Singer', new ArrayList(#["Pelo Blanco", "Gordo"]), new ArrayList(#["Viajar", "Destruir"])) 

		//Crear paises
		var uru = crearPais(new ArrayList(#["Chico", "Bandera a rayas con sol a un costado", "Su moneda es el peso"]), "Uruguay", elJuego)
		var brasil = crearPais(new ArrayList(#["Hablan portugues", "bandera verde y amarilla con circulo azul en el centro"]), "Brasil", elJuego)
		
		var carac3 = new ArrayList(
			#["Tiene las cataratas del Iguazú", "Bandera celeste y blanca con sol en el centro", "Juegan futbol"])
		var arg = new Pais("Argentina", carac3, elJuego)

		var carac4 = new ArrayList(#["Sin salida al mar", "Bandera verde", "Su moneda es el boliviano"])
		var bol = new Pais("Bolivia", carac4, elJuego)

		var carac5 = new ArrayList(
			#["Bandera roja y blanca", "Esta la ciudad de Machu Picchu", "Su moneda es el Nuevo Sol"])
		var peru = new Pais("Peru", carac5, elJuego)

		uru.lugaresDeInteres.add(new Biblioteca(carmenSanDiego))
		uru.lugaresDeInteres.add(new Embajada(carmenSanDiego))
		uru.lugaresDeInteres.add(new Club(carmenSanDiego))
		arg.lugaresDeInteres.add(new Club(carmenSanDiego))
		arg.lugaresDeInteres.add(new Biblioteca(carmenSanDiego))
		arg.lugaresDeInteres.add(new Embajada(carmenSanDiego))
		brasil.lugaresDeInteres.add(new Embajada(carmenSanDiego))
		brasil.lugaresDeInteres.add(new Club(carmenSanDiego))
		brasil.lugaresDeInteres.add(new Biblioteca(carmenSanDiego))
		bol.lugaresDeInteres.add(new Embajada(carmenSanDiego))
		bol.lugaresDeInteres.add(new Club(carmenSanDiego))
		bol.lugaresDeInteres.add(new Biblioteca(carmenSanDiego))
		peru.lugaresDeInteres.add(new Embajada(carmenSanDiego))
		peru.lugaresDeInteres.add(new Club(carmenSanDiego))
		peru.lugaresDeInteres.add(new Biblioteca(carmenSanDiego))


		//Crear caso1
		var planEscCaso1 = new ArrayList
		planEscCaso1 += arg
		planEscCaso1 += brasil
		var String descripcionCaso1 = "Han robado pinturas valiosas, un sospechoso de sexo femenino 
a sido visto en el lugar del crimen"
		var caso1 = new Caso(elJuego, "Robo de pinturas valiosas", planEscCaso1, carmenSanDiego, descripcionCaso1,
			"Pintura", uru, uru)
      

		//Ocupantes de lugares
		var informanteU = new Informante(caso1, uru.lugaresDeInteres.get(0))
		var informanteU2 = new Informante(caso1, uru.lugaresDeInteres.get(1))
		var informanteU3 = new Informante(caso1, uru.lugaresDeInteres.get(2))

		var informanteA = new Informante(caso1, arg.lugaresDeInteres.get(0))
		var informanteA2 = new Informante(caso1, arg.lugaresDeInteres.get(1))
		var informanteA3 = new Informante(caso1, arg.lugaresDeInteres.get(2))

		var informanteB = new Informante(caso1, brasil.lugaresDeInteres.get(0))
		var informanteB2 = new Informante(caso1, brasil.lugaresDeInteres.get(1))
		brasil.lugaresDeInteres.get(2).setVillano((carmenSanDiego))
		brasil.lugaresDeInteres.get(2).setOcupante((carmenSanDiego))

		brasil.lugaresDeInteres.get(2).setVillano((carmenSanDiego))
		brasil.lugaresDeInteres.get(2).setOcupante((carmenSanDiego))

		elJuego.agregarPais(uru)
		elJuego.agregarPais(bol)
		elJuego.agregarPais(arg)
		elJuego.agregarPais(brasil)
		elJuego.agregarPais(peru)

		uru.conexiones.add(arg)
		uru.conexiones.add(brasil)
		uru.conexiones.add(bol)
		bol.conexiones.add(arg)
		bol.conexiones.add(brasil)
		arg.conexiones.add(peru)
		arg.conexiones.add(uru)
		arg.conexiones.add(brasil)
		brasil.conexiones.add(arg)
		brasil.conexiones.add(uru)
		peru.conexiones.add(uru)

        elJuego.caso=caso1
        
        elJuego
	}
//	
//		def  static void main(String[] args) {
//		// TODO Auto-generated method stub
//      
//      		  var juego = Repository.crearUnJuego
////      		  var rep = 
//              var idJ = Repository.instance.agregarJuego(juego)
//                  idJ.toString
//      		  
//      		  
//      		  
//      var b =  Repository.instance.obtenerJuego(idJ)
//       b.caso
//      
//	}
}